#ifndef QIPAN_H
#define QIPAN_H

#include <QWidget>
#include <QPainter>
#include <QPaintEvent>
#include <QMouseEvent>

/* 角色 */
enum Role
{
    EMPTY = 0,
    PLAYER,
    NPC,
    STOP
    /* todo... */
};

class qipan : public QWidget
{
    Q_OBJECT
public:
    explicit qipan(QWidget *parent = nullptr);

public:
    bool isCheckWin(int row, int col, Role role);

    static int getBoardSize();

    int getPointVal(int row, int col);

    void setPointVal(int row, int col, Role role);

signals:
    /* 发送位置信号 */
    void cellClicked(int row, int col);

public slots:

protected:
    /* 绘图事件 */
    void paintEvent(QPaintEvent * event);

    /* 鼠标移动事件 */
    void mouseMoveEvent(QMouseEvent * event);

    /* 鼠标按压事件 */
    void mousePressEvent(QMouseEvent * event);

private:
    /* 棋盘15根线 */
    static const int m_boardSize = 15;

    /* 棋盘格子大小 */
    static const int m_cellSize = 40;

    /* 棋盘到边缘的距离 */
    static const int m_margin = m_cellSize / 2;

    /* 二维数组 */
    /* 0:代表没有 1:代表玩家 2:代表人机 */
    int m_point[m_boardSize][m_boardSize];

    /* 鼠标悬停x坐标 */
    int m_hoverRow;
    /* 鼠标悬停y坐标 */
    int m_hoverCol;
    /* 是否需要重新绘制悬停 */
    bool m_isHoverFlag;
};

#endif // QIPAN_H
